<?php
include_once(dirname(__FILE__).'/service.php');
include_once(dirname(__FILE__).'/classes_database/services.database.product.php');
include_once(dirname(__FILE__).'/services.filesystem.php');

class Product extends Service
{
    private $db = null;

    public function __construct()
    {
        $this->db = DBProduct::getInstance();
    }

    /*-----------------------------------------------------------------------------------------------------
      ----------------------------------- Administración de TAGS ------------------------------------------
      -----------------------------------------------------------------------------------------------------*/
    
    public function createProduct($id_tag,$esl_tag_alias,$esl_tag_barcode,$esl_tag_id_producto)
    {
		return $this->db->insertProduct($id_tag,$esl_tag_alias,$esl_tag_barcode,$esl_tag_id_producto);
    }

    public function updateProduct($id_tag,$esl_tag_alias,$esl_tag_barcode,$esl_tag_id_producto)
    {
        return $this->db->updateProduct($id_tag,$esl_tag_alias,$esl_tag_barcode,$esl_tag_id_producto);
    }

    public function linkProduct($id_tag,$esl_tag_id_producto)
    {
        return $this->db->linkProduct($id_tag,$esl_tag_id_producto);
    }

    public function deleteProduct($id_tag)
    {
        return $this->db->deleteProduct($id_tag);
    }
	
	public function listTags($params)
    {
        return $this->db->listTags($params);
    }
	
	public function listProducts($params)
    {
        return $this->db->listProducs($params);
    }
    
    
	// Tomo las 1eras ocho letras del nombre
	// un espacio
	// el precio en formato: $3.2
	// el precio x unidad en formato: $3.2
	// Una de las siguientes: /(kg-un-lt)
	// un espacio
	// La palabra PROMO si corresponde
	private function buildDisplayMessage( $tagData )
	{
		$msg = '';
		
		// Si no tengo ningún producto asociado retorno un mensaje vacio
		//   de lo contrario armo el mensaje
		if ( $tagData['esl_tag_id_producto'] == null )
		{
			$msg = '                                ';
		}
		else
		{
			// Formato del mensaje:
			//	- Nombre corto del producto (8 caracteres)
			//  - Espacio
			//  - precio: $03.2
			//  - precio por unidad: $03.2
			//  - Una de las siguientes: /(kg-un-lt)  (si corresponde), sino: 10 espacios
			//  - Un espacio
			//  - La palabra PROMO (si corresponde), sino: 5 espacios
		
			$productName = $tagData['esl_producto_nombre_corto'];
			$this->getLogger()->debug( "'${productName}'" );

			$price = sprintf('$%6.2f', $tagData['esl_producto_precio'] );
			$this->getLogger()->debug( "'${price}'" );

			if ( $tagData['esl_producto_precio_por_unidad'] != null )
			{
				$unitaryPrice = sprintf('$%6.2f', $tagData['esl_producto_precio_por_unidad'] );
			}
			else
			{
				$unitaryPrice = "       ";
			}
			$this->getLogger()->debug( "'${unitaryPrice}'" );
	
			if ( $tagData['esl_tipo_unidad_nombre_corto'] != null )
			{
				$unit = sprintf('/%2.2s',$tagData['esl_tipo_unidad_nombre_corto']);
			}
			else
			{
				$unit = "   ";
			}
			$this->getLogger()->debug( "'${unit}'" );
	
			if ( $tagData['esl_producto_es_oferta'] == 't' )
			{
				$promoFlag = "PROMO";
			}
			//else
			//{
			//	$promoFlag = "     ";
			//}
			$this->getLogger()->debug( "'${promoFlag}'" );
			
			$msg = sprintf('%-8.8s %7.7s%7.7s%-3.3s %5.5s',$productName,$price,$unitaryPrice,$unit,$promoFlag);
		}
	
		return $msg;
	}

	public function updateDisplaysInfo()
    { 
    //		Acá empieza la magia
    //	
	//		1. Leer toda la data de los displays
    //	
    //		2. por cada display:
    //			2a. si tiene un producto asociado, armar el mensaje
    //			2b. sino enviarle un mensaje vacio
    //			2c. ejecutar el displayUpdater con la info del display
    //			2d. Se puede llegar a dormir un segundo el prog. si vemos q es necesario.
    
    	$result = $this->db->listTagData();
//		$this->getLogger()->debug( print_r( $result, true ) );
    	
		//exec( "rm /tmp/tpprof_log.txt" );    	
    	
    	foreach ( $result['rows'] as $tagData )
    	{
    		$tagBarcode = $tagData['esl_tag_barcode'];
    		$msg = "";
			$this->getLogger()->debug( "----------------------------------- " );
			$this->getLogger()->debug( "Procesando tag: ${tagData['id_tag']}" );
			$this->getLogger()->debug( "barcode: ${tagBarcode}" );

			$msg = $this->buildDisplayMessage( $tagData );

			$this->getLogger()->debug( "'${msg}'" );

			exec( "/var/www/tpprof/bin/displayUpdater /dev/ttyUSB0 ${tagBarcode} \"${msg}\" >> /tmp/tpprof_log.txt 2>&1" );
    	}

        return true;
    }

}

?>
